﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Entity
{

    /// <summary>
    /// 进货订单实体类（对应表：wms_order_purchase_order）
    /// </summary>
    public class PurchaseOrderEntity
    {
        /// <summary>
        /// 进货id（主键，自增）
        /// </summary>
        public int purchase_id { get; set; }

        /// <summary>
        /// 供应商id（可空）
        /// </summary>
        public int? supplier_id { get; set; }

        /// <summary>
        /// 规则id（可空）
        /// </summary>
        public int? rule_id { get; set; }

        /// <summary>
        /// 进货单号（非空）
        /// </summary>
        public string purchase_order_no { get; set; }

        /// <summary>
        /// 供应商id（非空，与supplier_id区分，可能关联不同维度）
        /// </summary>
        public int suppliers_id { get; set; }

        /// <summary>
        /// 进货日期（非空）
        /// </summary>
        public DateTime purchase_date { get; set; }

        /// <summary>
        /// 单据状态（非空，char(1)，如：'0'草稿、'1'已审核等）
        /// </summary>
        public string document_status { get; set; }

        /// <summary>
        /// 联系人（非空）
        /// </summary>
        public string contact_person { get; set; }

        /// <summary>
        /// 联系方式（非空）
        /// </summary>
        public string contact_information { get; set; }

        /// <summary>
        /// 进货人（非空）
        /// </summary>
        public string purchaser { get; set; }

        /// <summary>
        /// 审核人（可空）
        /// </summary>
        public string? reviewer { get; set; }

        /// <summary>
        /// 审核时间（非空）
        /// </summary>
        public DateTime review_time { get; set; }

        /// <summary>
        /// 组织机构id（非空）
        /// </summary>
        public int organizations_id { get; set; }

        /// <summary>
        /// 备注（可空）
        /// </summary>
        public string? note { get; set; }

        /// <summary>
        /// 创建人（非空）
        /// </summary>
        public string create_by { get; set; }

        /// <summary>
        /// 创建时间（非空）
        /// </summary>
        public DateTime create_time { get; set; }

        /// <summary>
        /// 修改人（可空）
        /// </summary>
        public string? update_by { get; set; }

        /// <summary>
        /// 修改时间（可空）
        /// </summary>
        public DateTime? update_time { get; set; }

        /// <summary>
        /// 逻辑删除（非空，char(1)，如：'0'未删除、'1'已删除）
        /// </summary>
        public string is_delete { get; set; }
    }

    // 前端请求模型（接收前端传递的主表+明细数据）
    public class PurchaseOrderRequest
    {
        public string purchase_order_no { get; set; }
        public int? supplier_id { get; set; }
        public int suppliers_id { get; set; }
        public DateTime purchase_date { get; set; }
        public string contact_person { get; set; }
        public string contact_information { get; set; }
        public string purchaser { get; set; }
        public int organizations_id { get; set; }
        public string note { get; set; }
        public List<PurchaseOrderDetailRequest> details { get; set; }
    }

    public class PurchaseOrderDetailRequest
    {
        public int Product_ID { get; set; }
        public decimal purchase_unit_price { get; set; }
        public int prod_num { get; set; }
        public string note { get; set; }
    }
    
    public class PurchaseOrderDTO
    {
        // 主表字段（与PurchaseOrderEntity一致）
        public int purchase_id { get; set; }
        public string purchase_order_no { get; set; }
        public string document_status { get; set; }
        public DateTime purchase_date { get; set; }
        public long suppliers_id { get; set; }
        public string contact_person { get; set; }
        public string contact_information { get; set; }
        public int organizations_id { get; set; }
        public string purchaser { get; set; }
        public string create_by { get; set; }
        public DateTime create_time { get; set; }
        public string reviewer { get; set; }
        public DateTime? review_time { get; set; }

        // 明细表汇总字段（新增）
        public int TotalQuantity { get; set; } // 货品总数量（明细prod_num之和）
        public decimal TotalAmount { get; set; } // 货品总金额（明细purchase_unit_price*prod_num之和）
        public string ProductNames { get; set; } // 进货货品名称（用逗号拼接明细中的货品名称）
        public int Product_ID { get; set; }
    }



    public class PurchaseOrderDetailDTO
    {
        
        public int purchase_id { get; set; }
        public int Product_ID { get; set; }
        public string product_name { get; set; }
        public string product_code { get; set; }
        public string specification_model { get; set; }
        public string unit { get; set; }
        public string type_of_goods { get; set; }
        public decimal purchase_unit_price { get; set; }
        public string unit_name { get; set; }
        public string type_of_goods_name { get; set; }
        public int prod_num { get; set; }
        public int stkIn_num { get; set; }
        public string note { get; set; }
        public decimal current_inventory { get; set; }
    }


    /// <summary>
    /// 进货订单主表数据传输对象（用于列表页和详情页主信息展示）
    /// 包含：主表核心字段 + 关联表字段（如供应商名称） + 明细表汇总字段
    /// </summary>
    public class PurchaseOrderMainDTO
    {
        /// <summary>
        /// 进货订单ID（主键，自增）
        /// </summary>
        public int purchase_id { get; set; }

        /// <summary>
        /// 进货单号（唯一标识，非空）
        /// </summary>
        [Required]
        public string purchase_order_no { get; set; }

        /// <summary>
        /// 单据状态（'0'=草稿，'1'=已审核，非空）
        /// </summary>
        [Required]
        public string document_status { get; set; }

        /// <summary>
        /// 进货日期（非空）
        /// </summary>
        [Required]
        public DateTime purchase_date { get; set; }

        /// <summary>
        /// 供应商ID（关联供应商表，非空）
        /// </summary>
        [Required]
        public long suppliers_id { get; set; }
        /// <summary>
        /// 供应商名称（关联wms_basic_supplier_management表查询）
        /// </summary>
        public string supplierName { get; set; }

        /// <summary>
        /// 联系人（非空）
        /// </summary>
        [Required]
        public string contact_person { get; set; }

        /// <summary>
        /// 联系方式（非空）
        /// </summary>
        [Required]
        public string contact_information { get; set; }

        /// <summary>
        /// 进货部门ID（关联组织机构表，非空）
        /// </summary>
        [Required]
        public int organizations_id { get; set; }

        /// <summary>
        /// 进货人（非空）
        /// </summary>
        [Required]
        public string purchaser { get; set; }

        /// <summary>
        /// 制单人（非空）
        /// </summary>
        [Required]
        public string create_by { get; set; }

        /// <summary>
        /// 制单时间（非空）
        /// </summary>
        [Required]
        public DateTime create_time { get; set; }

        /// <summary>
        /// 审核人（可空，未审核时为null）
        /// </summary>
        public string reviewer { get; set; }

        /// <summary>
        /// 审核时间（可空，未审核时为null）
        /// </summary>
        public DateTime? review_time { get; set; }

        /// <summary>
        /// 备注（可空）
        /// </summary>
        public string note { get; set; }

        /// <summary>
        /// 货品总数量（明细表prod_num字段汇总）
        /// </summary>
        public int TotalQuantity { get; set; }

        /// <summary>
        /// 货品总金额（明细表purchase_unit_price * prod_num汇总）
        /// </summary>
        public decimal TotalAmount { get; set; }

        /// <summary>
        /// 进货货品名称集合（明细表关联货品表product_name字段，用逗号拼接）
        /// </summary>
        public string ProductNames { get; set; }
        /// <summary>
        /// 单据状态中文标签（关联字典表）
        /// </summary>
        public string document_status_label { get; set; }

        /// <summary>
        /// 进货部门名称（关联组织机构表）
        /// </summary>
        public string organizations_name { get; set; }
    }


    /// <summary>
    /// 详情页聚合DTO（主表+明细）
    /// </summary>
    public class PurchaseOrderDetailAggregateDTO
    {
        public PurchaseOrderMainDTO Main { get; set; }
        public List<PurchaseOrderDetailDTO> Details { get; set; }
        public void Deconstruct(out PurchaseOrderMainDTO main, out List<PurchaseOrderDetailDTO> details)
        {
            main = this.Main;
            details = this.Details;
        }
    }

    public class BatchReviewRequest
    {
        public List<string> OrderNos { get; set; }
        public string Status { get; set; }
        public string Opinion { get; set; }
    }
    
}
